package com.traffic.between.redis;

import com.traffic.between.util.DictConstantKeys;

/**
 * redis 工具类 将ehcache系统全局变量改造成redis，以达到分布式共享目的
 * 
 */
public class RedisKit {

	/**
	 * 将数据以键值对形式放入redis中
	 * 
	 * @param key
	 *            键
	 * @param value
	 *            值
	 */
	public static boolean put(String key, Object value) {
		String isOk = Redis.use(DictConstantKeys.redis_sys_name).set(key, value);
		return (isOk == null || !isOk.equals("OK")) ? false : true;
	}

	/**
	 * 将数据以键值对形式放入redis中
	 * 
	 * @param key
	 *            键
	 * @param value
	 *            值
	 * @param seconds
	 *            过期时间(单位秒)
	 */
	public static void put(String key, Object value, int seconds) {
		Redis.use(DictConstantKeys.redis_sys_name).setex(key, seconds, value);
	}

	/**
	 * 将数据以键值对形式放入redis中
	 * 
	 * @param key
	 *            键
	 * @param value
	 *            值
	 * @param seconds
	 *            过期时间(单位秒)
	 */
	public static Long setnx(String key, String value) {
		return Redis.use(DictConstantKeys.redis_sys_name).setnx(key, value);
	}

	/**
	 * 是否存在
	 * 
	 * @param key
	 *            键
	 * @param true
	 *            存在
	 */
	public static boolean exists(String key) {
		return Redis.use(DictConstantKeys.redis_sys_name).exists(key);
	}

	/**
	 * 将key值自增+1
	 * 
	 * @param key
	 * @return 返回自增后数目
	 */
	public static Long incrByOne(String key) {
		return Redis.use(DictConstantKeys.redis_sys_name).incrBy(key, 1);
	}

	/**
	 * 将key的数据设置失效时间10分钟+1秒
	 * 
	 * @param key
	 *            键
	 */
	public static Long expireTenMin(String key) {
		return Redis.use(DictConstantKeys.redis_sys_name).expire(key, 10 * 60 + 1);
	}

	/**
	 * 
	 * @param key
	 * @param value
	 * @param hours
	 */
	public static void putWithExpire(String key, String value, int hours) {
		Redis.use(DictConstantKeys.redis_order_name).setex(key, hours * 60 * 60, value);
	}

	/**
	 * 从redis中根据key获取数据
	 * 
	 * @param key
	 *            键
	 * @return 值
	 */
	@SuppressWarnings("unchecked")
	public static <T> T getWithExpire(String key) {
		return (T) Redis.use(DictConstantKeys.redis_order_name).get(key);
	}

	/**
	 * 从redis中根据key获取数据
	 * 
	 * @param key
	 *            键
	 * @return 值
	 */
	@SuppressWarnings("unchecked")
	public static <T> T get(String key) {
		return (T) Redis.use(DictConstantKeys.redis_sys_name).get(key);
	}
	/**
	 * 批量获取key
	 * @param pattern
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static <T> T keys(String pattern) {
		return (T) Redis.use(DictConstantKeys.redis_sys_name).keys(pattern);
	}
	@SuppressWarnings("unchecked")
	public static <T> T mget(Object key) {
		return (T) Redis.use(DictConstantKeys.redis_sys_name).mget(key);
	}

	/**
	 * 从redis中根据key获取数据
	 * 
	 * @param key
	 *            键
	 * @return 值
	 */
	public static void remove(String key) {
		Redis.use(DictConstantKeys.redis_sys_name).del(key);
	}

	/**
	 * 将redis中的数据全部删除
	 */
	public static void delAll() {
		Redis.use(DictConstantKeys.redis_sys_name).flushdb();
	}

}
